// Tencent is pleased to support the open source community by making
// 蓝鲸智云 - 监控平台/日志平台 (BlueKing - Monitor/Log) available.
// Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
// Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://opensource.org/licenses/MIT
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
//

package queue

import (
	"time"

	"github.com/elastic/beats/libbeat/common"

	"github.com/TencentBlueKing/bk-collector/define"
)

type Queue interface {
	Put(event define.Event)
	Pop() <-chan common.MapStr
	Close()
}

// getDatetime 生成时间信息
func getDatetime() (string, string, int64) {
	now := time.Now()

	const timeFormat = "2006-01-02 15:04:05"
	const timeZoneFormat = "Z07"
	return now.Format(timeFormat), now.UTC().Format(timeZoneFormat), now.Unix()
}

func makeTracesOrLogsMapStr(dataId int32, data []common.MapStr) common.MapStr {
	datetime, utcTime, timestamp := getDatetime()
	return common.MapStr{
		"datetime": datetime,
		"utctime":  utcTime,
		"time":     timestamp,
		"dataid":   dataId,
		"items":    data,
	}
}

func NewTracesMapStr(dataId int32, data ...common.MapStr) common.MapStr {
	return makeTracesOrLogsMapStr(dataId, data)
}

func NewLogsMapStr(dataId int32, data ...common.MapStr) common.MapStr {
	return makeTracesOrLogsMapStr(dataId, data)
}

func NewMetricsMapStr(dataId int32, data ...common.MapStr) common.MapStr {
	return common.MapStr{
		"dataid":  dataId,
		"version": "1.0.0",
		"data":    data,
	}
}
